﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.Alumno;
using SanFranciscoModel.Docente;


namespace SanFranciscoModel.Materia
{
    public class MateriaManager
    {

        public List<Materia> getMateriasByIdCurso(int idCurso)
        {
            List<Materia> ListMaterias = new List<Materia>();
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();


            HorarioDocenteDataContext db = new HorarioDocenteDataContext();
            MateriaDataContext db2 = new MateriaDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdCurso == idCurso
                         select x;

            foreach (var curso in objeto)
            {
                bool flag = false;
                foreach (Materia m in ListMaterias)
                {
                    if (flag == false)
                    {
                        if (curso.IdMateria == m.idMateria)
                        {
                            flag = true;
                        }
                    }
                }
                if (flag==false)
                    ListMaterias.Add(getMateriasByIdMateria(curso.IdMateria));
            }

            //foreach (MateriaXCurso mxc in ListMateriaXCurso)
            //{

            //    var objeto2 = from x in db2.Materias
            //                 where x.idMateria == mxc.idMateria
            //                 select x;

            //    foreach (var materia in objeto2)
            //    {
            //        ListMaterias.Add(materia);
            //    }

            //}
            return ListMaterias;
        }

        public List<Materia> getMateriasByIdCursoAndExistinDesempeñoDocente(int idCurso)
        {
            List<Materia> ListMaterias = new List<Materia>();
            List<MateriaXCurso> ListMateriaXCurso = new List<MateriaXCurso>();


            MateriaXCursoDataContext db = new MateriaXCursoDataContext();
            MateriaDataContext db2 = new MateriaDataContext();

            DocenteManager DocenteManager = new Docente.DocenteManager();
            List<DesempeñoDocente> DesempeñoDocenteList = new List<DesempeñoDocente>();


            var objeto = from x in db.MateriaXCursos
                         where x.idCurso == idCurso
                         select x;

            foreach (var curso in objeto)
            {
                ListMateriaXCurso.Add(curso);
            }

            foreach (MateriaXCurso mxc in ListMateriaXCurso)
            {

                var objeto2 = from x in db2.Materias
                              where x.idMateria == mxc.idMateria
                              select x;

                foreach (var materia in objeto2)
                {
                    ListMaterias.Add(materia);
                }

            }
            return ListMaterias;
        }

        public List<Materia> getMateriasAll()
        {
            List<Materia> ListMaterias = new List<Materia>();
            MateriaDataContext db = new MateriaDataContext();

            var objeto = from x in db.Materias
                         select x;

            foreach (var curso in objeto)
            {
                ListMaterias.Add(curso);
            }

            return ListMaterias;
        }

        public Materia getMateriasByIdMateria(int id)
        {
            List<Materia> ListMaterias = new List<Materia>();
            Materia Materia = new SanFranciscoModel.Materia.Materia();

            MateriaDataContext db = new MateriaDataContext();

            var objeto = from x in db.Materias
                         where x.idMateria == id
                         select x;

            foreach (var curso in objeto)
            {
                Materia = curso;
            }

            
            return Materia;
        }

        public List<MateriaXCurso> getMateriaXCursoAll()
        {
            List<MateriaXCurso> MateriaXCursoList = new List<MateriaXCurso>();
            MateriaXCurso MateriaXCurso = new MateriaXCurso();

            MateriaXCursoDataContext db = new MateriaXCursoDataContext();

            var objeto = from x in db.MateriaXCursos
                         select x;

            foreach (var curso in objeto)
            {
                MateriaXCursoList.Add(curso);
            }

            return MateriaXCursoList;
        }

        public List<MateriaXCurso> getMateriaXCursoByIdCurso(int idCurso)
        {
            List<MateriaXCurso> MateriaXCursoList = new List<MateriaXCurso>();
            MateriaXCurso MateriaXCurso = new MateriaXCurso();

            MateriaXCursoDataContext db = new MateriaXCursoDataContext();

            var objeto = from x in db.MateriaXCursos
                         where x.idCurso==idCurso
                         select x;

            foreach (var curso in objeto)
            {
                MateriaXCursoList.Add(curso);
            }

            return MateriaXCursoList;
        }

        

        public List<MateriaXDocente> getMateriasXDcoenteAll()
        {
            List<MateriaXDocente> MateriaXDocenteList = new List<MateriaXDocente>();
            MateriaXDocente MateriaXDocente = new MateriaXDocente();

            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         select x;

            foreach (var curso in objeto)
            {
                MateriaXDocenteList.Add(curso);
            }

            return MateriaXDocenteList;
        }

        public static void guardarMateriaXDocente(MateriaXDocente MateriaXDocente)
        {
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            try
            {
                db.MateriaXDocentes.InsertOnSubmit(MateriaXDocente);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        public static void GuardarMateriaXCurso(int idMateria, int idCurso)
        {
            MateriaXCursoDataContext db = new MateriaXCursoDataContext();
            MateriaXCurso MateriaXCurso = new MateriaXCurso();

            MateriaXCurso.idCurso = idCurso;
            MateriaXCurso.idMateria = idMateria;

            try
            {
                db.MateriaXCursos.InsertOnSubmit(MateriaXCurso);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }
        

        public static bool ExisteMateriaXCurso(int idMateria, int idCurso)
        {
            MateriaXCursoDataContext db = new MateriaXCursoDataContext();
            MateriaXCurso MateriaXCurso = new Intermedias.MateriaXCurso();

            var objeto = from z in db.MateriaXCursos
                         where z.idCurso == idCurso
                         && z.idMateria == idMateria
                         select z;

            foreach (var alum in objeto)
            {
                MateriaXCurso = alum;
            }

            if (MateriaXCurso.idCurso == idCurso && MateriaXCurso.idMateria==idMateria)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool ExisteMateriaXDocente(MateriaXDocente MateriaXDocente)
        {
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();
            MateriaXDocente MateriaXDocente2 = new Intermedias.MateriaXDocente();

            var objeto = from alumno in db.MateriaXDocentes
                         where alumno.DNIDocente==MateriaXDocente.DNIDocente
                         && alumno.idMateria == MateriaXDocente.idMateria
                         select alumno;

            foreach (var alum in objeto)
            {
                MateriaXDocente2 = alum;
            }

            if (MateriaXDocente2.DNIDocente == MateriaXDocente.DNIDocente && MateriaXDocente.idMateria==MateriaXDocente2.idMateria)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static List<MateriaCursoDocenteHorario> getMateriaCursoDocenteHorarioFull()
        {
            List<MateriaCursoDocenteHorario> MateriaCursoDocenteHorarioList = new List<MateriaCursoDocenteHorario>();
            MateriaCursoDocenteHorario MateriaCursoDocenteHorario = new MateriaCursoDocenteHorario();

            MateriaCursoDocenteHorarioDataContext db = new MateriaCursoDocenteHorarioDataContext();

            var objeto = from x in db.MateriaCursoDocenteHorarios
                         select x;

            foreach (var v in objeto)
            {
                MateriaCursoDocenteHorarioList.Add(v);
            }


            return MateriaCursoDocenteHorarioList;
        }

        public Materia getMateriaByNombre(string Materia)
        {
            Materia materia = new SanFranciscoModel.Materia.Materia();
            MateriaDataContext db = new MateriaDataContext();

            var objeto = from x in db.Materias
                         where x.Materia1 == Materia
                         select x;

            foreach (var v in objeto)
            {
                materia = v;
            }
            return materia;
        }

        public static List<MateriaXDocente> getMateriasXDocentebyDNIDocente(int _DNI)
        {
            List<MateriaXDocente> ListMateriaXDocente = new List<MateriaXDocente>();
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         where x.DNIDocente==_DNI
                         select x;

            foreach (var v in objeto)
            {
                ListMateriaXDocente.Add(v);
            }
            return ListMateriaXDocente;
        }

        public static void deleteMateriaXCurso(MateriaXDocente MateriaXDocente)
        {
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         where x.idMateria == MateriaXDocente.idMateria
                         && x.DNIDocente == MateriaXDocente.DNIDocente
                         select x;

            foreach (var f in objeto)
            {
                db.MateriaXDocentes.DeleteOnSubmit(f);
                db.SubmitChanges();
            }
        }

        public static void updateMateriaXCurso(MateriaXDocente MateriaXDocente, int Materia)
        {
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();
            MateriaXDocenteDataContext db2 = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         where x.idMateria == Materia
                         && x.DNIDocente == MateriaXDocente.DNIDocente
                         select x;

            foreach (var f in objeto)
            {
                db.MateriaXDocentes.DeleteOnSubmit(f);
                db.SubmitChanges();
            }



            try
            {
                db2.MateriaXDocentes.InsertOnSubmit(MateriaXDocente);
                db2.SubmitChanges();
            }
            catch
            {
            }
        }
    }
}
